package main

import "fmt"

// 异常
func errorG() {
	fmt.Println()
	fmt.Println("=========errorG========")
	fmt.Println()
	if result, errorMsg := divide(2, 1); errorMsg == "" {
		fmt.Printf("2 / 1 = %d\n", result)
	}
	if _, errorMsg := divide(2, 0); errorMsg != "" {
		fmt.Println("error Message is:", errorMsg)
	}
}

type DivideError struct {
	dividee int
	divider int
}

func (d *DivideError) Error() string {
	strFormat := `
    Cannot proceed, the divider is zero.
    dividee: %d
    divider: 0
`
	return fmt.Sprintf(strFormat, d.dividee)
}

func divide(varDividee int, varDivider int) (result int, errorMsg string) {
	if varDivider == 0 {
		dData := DivideError{
			varDividee,
			varDivider,
		}
		errorMsg = dData.Error()
		return
	} else {
		return varDividee / varDivider, ""
	}
}
